Block data storage devices store and/or retrieve digital data in the form of blocks which are individually addressable by a host device. Exemplary block data storage devices include hard disc drives, optical disc recorders and players, and magnetic digital tape recorders and players.
Such devices typically comprise a hardware/firmware based interface circuit having a buffer (first memory location), a communication channel and a recordable medium (second memory location). The user memory space of the second memory location is divided into a number of addressable blocks which are assigned host-level addresses (sometimes referred to as logical block addresses or LBAs).
Each LBA typically has a corresponding physical block address (PBA) used by servo control circuitry to align a data transducing head with the appropriate portion of the medium to access the desired LBA.
To write data to the medium, the host device issues a write command comprising the user data to be stored by the storage device along with a list of LBAs to which the user data are to be stored. The storage device temporarily stores the user data in the first memory location, schedules movement of the data transducing head to the appropriate location(s) over the medium, and then uses write channel portions of the communication channel to apply the appropriate encoding and conditioning of the data to write the data to the selected LBAs.
To subsequently read the data from the storage device, the host device issues a read command identifying the LBAs from which data are to be retrieved. The storage device schedules movement of the data transducing head to the appropriate location(s) over the medium, and then uses read channel portions of the communication channel to decode readback data which are placed into the first memory location (buffer) for subsequent transfer back to the host device.
A typical data storage device is configured to concurrently handle multiple pending access (read and write) commands from the host device. The commands are arranged into a command queue and a sort strategy is used to identify a sequence of execution of the pending access commands in hopes of optimizing the rate at which data are transferred between the host device and the data storage device.
A typical sort strategy involves calculating the elapsed time that would be required to move the appropriate data transducing head to the appropriate physical address of the medium in order to service each command. Generally, the access command that can be serviced in the shortest access time is selected from among the command queue as the next command to be executed.
In data storage devices that use rotatable media (discs), the time required for a particular data block to rotate around and reach the head (latency) is an important factor when selecting the execution order, as delays in waiting for the disc to rotate a selected data block around to the data transducing head can significantly decrease the resulting transfer rate.
One way that block data storage devices attempt to reduce the effects of such latency delays involves reading additional, nonrequested data into the buffer while the device waits for the requested data block to reach the head. If the host subsequently requests such data in the future, the data request can be satisfied immediately from the buffer (sometimes referred to as a “cache hit”). Cache hits tend to significantly improve data transfer performance and are therefore highly desirable.
While block data storage devices have been found operable in that such devices accommodate a wide variety of interfaces and host operating systems, a fundamental disadvantage with such devices is the lack of information that such devices have with respect to specific block level requests. A host device typically operates to distill a number of pending file requests (for both user data from user applications and operating system data required for use by the operating system) into an almost random appearing sequence of read and write commands for different blocks of data (LBAs) at different locations within the device memory.
A block data storage device generally has no mechanism to detect and distinguish the specific content of a particular access command, and hence is generally in the dark with regard to which commands should be accessed first, whether additional, nearby data to particular accessed data should be also placed into the buffer and which buffered data should be retained and for how long.
While some data transfer protocols (such as SCSI 3) do allow the host device to specify some measure of priority with a particular access command, such decisions are made at the host level, leaving the device to decide which commands to perform at each priority level and still not addressing the fundamental issues of retention and nonrequested data retrieval for particular commands.
Hence, while block data device manufacturers take great pains to try to develop complex command scheduling and retention policies in an attempt to guess at what data the host may require in the near future, in reality such efforts often provide little if any benefit during actual operation. In some cases such policies have actually been found to be counterproductive and even reduce overall data transfer rates during real world use.
Accordingly, there is a need for improvements in the art to provide effective and efficient data transfer operations with a data storage device that overcomes these and other limitations of existing block data transfer mechanisms.